##########################################################
# Código para extração de tabelas
# Autoria: Leonardo Rodrigues
# Código escrito e executado no RStudio (Version 1.3.1073)
##########################################################

### 1 Preparação ----
# Leitura dos pacotes
library(haven)
library(tidyverse)
library(ggthemes)
library("gt")
library(ggplot2)
library(directlabels)
library(ggrepel)
library(scales)
library(readr)
library(sitools)
library(webshot)
library(dplyr)
library(stringr)
library(tidyr)
library(tools)
library(summarytools)

enade <- read.table("data/originaisEnade/enade.txt", sep="\t")

#Mudando nome das categorias para aproveitar script anterior
enade$cor = ifelse(enade$cor == "Brancos", "Branca",
                   ifelse(enade$cor == "Negros", "Não-Branca", NA))

enade$year <- as.factor(enade$ciclo)
enade$year = relevel(enade$year, ref = "2")

enade$tese = ifelse(str_detect(enade$curso,"ENGENHARIA"), enade$curso, "outros")

### 2 Extração de Tabelas ----

#Tabela de Concluintes por área (N e %)
#### Quadro 1 ----
enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, inst, diploma) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = Ano, values_from = c(N)) %>%
  ungroup(inst) %>%
  mutate("Ciclo 1(%)"= Ciclo1/sum(Ciclo1)*100) %>%
  mutate("Ciclo 2(%)"= Ciclo2/sum(Ciclo2)*100) %>%
  gt(rowname_col = "diploma") %>%
  tab_stubhead(label = "Area") %>%
  fmt_number(columns = vars('Ciclo 1(%)', 'Ciclo 2(%)'), decimals = 1) %>%
  fmt_number(columns = vars(Ciclo1, Ciclo2), decimals = 0, use_seps = FALSE) %>%
  summary_rows(columns = vars(Ciclo1, Ciclo2,'Ciclo 1(%)', 'Ciclo 2(%)'),
               fns = list(TOTAL = "sum"),
               formatter = fmt_number, decimals = 0, use_seps = FALSE) %>%
  cols_align(align = "right", columns = TRUE) %>%
  tab_header(title = md("Concluintes por área (frequência e percentual)")) %>%
  tab_source_note(source_note = "ENADE, 2009-2017. Elaboração própria") %>%
  tab_spanner(label = "Ciclo 1", columns = vars("Ciclo1", "Ciclo 1(%)")) %>%
  tab_spanner(label = "Ciclo 2", columns = vars("Ciclo2", "Ciclo 2(%)")) %>%
  cols_label("Ciclo 1(%)" = md("%"), "Ciclo 2(%)" = md("%")) %>%
  cols_label("Ciclo1" = md("N"), "Ciclo2" = md("N")) %>%
  cols_label("inst" = md("Instituição")) %>%
  cols_align(align = "center") %>%
  tab_options(data_row.padding = px(2),
              row_group.padding = px(1),
              table.font.size = "small",
              heading.align = "center")


#Tabela de concluintes por setor e área (N e %)
#não utilizada no artigo
trede <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, diploma, inst) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = Ano, values_from = c(N)) %>%
  mutate("Ciclo 1(%)"= Ciclo1/sum(Ciclo1)*100) %>%
  mutate("Ciclo 2(%)"= Ciclo2/sum(Ciclo2)*100)

totalrede <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, inst) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = Ano, values_from = c(N)) %>%
  mutate("Ciclo 1(%)"= Ciclo1/sum(Ciclo1)*100) %>%
  mutate("Ciclo 2(%)"= Ciclo2/sum(Ciclo2)*100)

totalrede <- totalrede %>% add_column(diploma = "Total")
tabelao <- full_join(trede, totalrede)

tabela <- tabelao %>% gt(rowname_col = "inst", groupname_col = c("diploma")) %>%
  tab_stubhead(label = "Area") %>%
  fmt_number(columns = vars('Ciclo 1(%)', 'Ciclo 2(%)'), decimals = 1) %>%
  fmt_number(columns = vars(Ciclo1, Ciclo2), decimals = 0, use_seps = FALSE) %>%
  cols_align(align = "right", columns = TRUE) %>%
  tab_header(title = md("Concluintes por setor e área (frequência e percentual)")) %>%
  tab_source_note(source_note = "ENADE, 2009-2017. Elaboração própria") %>%
  tab_spanner(label = "Ciclo 1", columns = vars("Ciclo1", "Ciclo 1(%)")) %>%
  tab_spanner(label = "Ciclo 2", columns = vars("Ciclo2", "Ciclo 2(%)")) %>%
  cols_label("Ciclo 1(%)" = md("%"), "Ciclo 2(%)" = md("%")) %>%
  cols_label("Ciclo1" = md("N"), "Ciclo2" = md("N")) %>%
  cols_label("inst" = md(" ")) %>%
  cols_align(align = "center") %>%
  row_group_order(groups = c("Engenharias", "Direito", "Medicina",
                             "Licenciaturas", "Tecnólogos")) %>%
  tab_options(data_row.padding = px(2),
              row_group.padding = px(1),
              table.font.size = "small",
              heading.align = "center")

#Percentual de concluintes para cada variável por ciclo e área
#### Quadro 2 ----
tsexo <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, sexo) %>%
  drop_na(sexo) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(sexo), values_from = c(N)) %>%
  mutate(soma = Feminino + Masculino, 
         Feminino.p = (Feminino/soma)*100,
         Masculino.p= (Masculino/soma)*100) %>%
  dplyr::select(diploma, Ano, Feminino.p, Masculino.p)

tcor <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, cor) %>%
  drop_na(cor) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(cor), values_from = c(N)) %>%
  mutate(soma = Branca  + `Não-Branca`, 
         Branca.p = (Branca/soma)*100,
         NãoBranca.p= (`Não-Branca`/soma)*100) %>%
  dplyr::select(diploma, Ano, Branca.p, NãoBranca.p)


tedu <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, edu) %>%
  drop_na(edu) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(edu), values_from = c(N)) %>%
  mutate(soma = `Até Ensino Médio`  + `Ensino superior ou mais`, 
         Superior.p = (`Ensino superior ou mais`/soma)*100,
         Médio.p= (`Até Ensino Médio`/soma)*100) %>%
  dplyr::select(diploma, Ano, Superior.p, Médio.p)

treg <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, regiao1) %>%
  drop_na(regiao1) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(regiao1), values_from = c(N)) %>%
  mutate(soma = outro + `Sul e Sudeste`, 
         outra.p = (outro/soma)*100,
         SulSudeste.p= (`Sul e Sudeste`/soma)*100) %>%
  dplyr::select(diploma, Ano, SulSudeste.p, outra.p)

tage <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, age) %>%
  drop_na(age) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(age), values_from = c(N)) %>%
  mutate(soma = `20-30` + `31+`, 
         ate30.p = (`20-30`/soma)*100,
         depois30.p= (`31+`/soma)*100) %>%
  dplyr::select(diploma, Ano, ate30.p, depois30.p)

mergeCols <- c("diploma", "Ano")
tabela  <- full_join(tsexo,  tcor, by = mergeCols)
tabela  <- full_join(tabela,  tedu, by = mergeCols)
tabela  <- full_join(tabela,  treg, by = mergeCols)
tabela  <- full_join(tabela,  tage, by = mergeCols)

tudosexo <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, sexo) %>%
  drop_na(sexo) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(sexo), values_from = c(N)) %>%
  mutate(soma = Feminino + Masculino, 
         Feminino.p = (Feminino/soma)*100,
         Masculino.p= (Masculino/soma)*100) %>%
  dplyr::select(Ano, Feminino.p, Masculino.p)

tudocor <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, cor) %>%
  drop_na(cor) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(cor), values_from = c(N)) %>%
  mutate(soma = Branca  + `Não-Branca`, 
         Branca.p = (Branca/soma)*100,
         NãoBranca.p= (`Não-Branca`/soma)*100) %>%
  dplyr::select(Ano, Branca.p, NãoBranca.p)


tudoedu <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, edu) %>%
  drop_na(edu) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(edu), values_from = c(N)) %>%
  mutate(soma = `Até Ensino Médio`  + `Ensino superior ou mais`, 
         Superior.p = (`Ensino superior ou mais`/soma)*100,
         Médio.p= (`Até Ensino Médio`/soma)*100) %>%
  dplyr::select(Ano, Superior.p, Médio.p)

tudoreg <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, regiao1) %>%
  drop_na(regiao1) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(regiao1), values_from = c(N)) %>%
  mutate(soma = outro + `Sul e Sudeste`, 
         outra.p = (outro/soma)*100,
         SulSudeste.p= (`Sul e Sudeste`/soma)*100) %>%
  dplyr::select(Ano, SulSudeste.p, outra.p)

tudoage <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, age) %>%
  drop_na(age) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(age), values_from = c(N)) %>%
  mutate(soma = `20-30` + `31+`, 
         ate30.p = (`20-30`/soma)*100,
         depois30.p= (`31+`/soma)*100) %>%
  dplyr::select(Ano, ate30.p, depois30.p)

mergeCols <- c("Ano")
tabelao  <- full_join(tudosexo,  tudocor, by = mergeCols)
tabelao  <- full_join(tabelao,  tudoedu, by = mergeCols)
tabelao  <- full_join(tabelao,  tudoreg, by = mergeCols)
tabelao  <- full_join(tabelao,  tudoage, by = mergeCols)
tabelao <- tabelao %>% add_column(diploma = "Total")

tabela <- full_join(tabela, tabelao)

tabela <- tabela %>% gt(rowname_col = "Ano", groupname_col = c("diploma")) %>%
  tab_header(title = "Estatísticas descritivas para as variáveis analisadas",
             subtitle = "2009 - 2011") %>%
  tab_source_note(source_note = "Enade, 2009-2017. Elaboração própria") %>%
  fmt_number(columns = vars("Feminino.p", "Masculino.p", "Branca.p", "NãoBranca.p", "Superior.p", "Médio.p",
                            "SulSudeste.p", "outra.p", "ate30.p", "depois30.p"), decimals = 1) %>%
  tab_spanner(label = "Gênero", columns = vars("Feminino.p", "Masculino.p")) %>%
  tab_spanner(label = "Raça/cor", columns = vars("Branca.p", "NãoBranca.p")) %>%
  tab_spanner(label = "Escolaridade dos pais", columns = vars("Superior.p", "Médio.p")) %>%
  tab_spanner(label = "Região", columns = vars("SulSudeste.p", "outra.p")) %>%
  tab_spanner(label = "Idade", columns = vars("ate30.p", "depois30.p")) %>%
  cols_label("Feminino.p" = md("Feminino"), "Masculino.p" = md("Masculino")) %>%
  cols_label("Branca.p" = md("Brancos"), "NãoBranca.p" = md("Negros")) %>%
  cols_label("Superior.p" = md("Superior"), "Médio.p" = md("Médio")) %>%
  cols_label("SulSudeste.p" = md("Sul e Sudeste"), "outra.p" = md("Outras")) %>%
  cols_label("ate30.p" = md("Até 30 anos"), "depois30.p" = md("31 anos ou mais")) %>%
  cols_label("diploma" = md("Área"), "Ano" = md("Ciclo")) %>%
  cols_align(align = "center") %>%
  row_group_order(groups = c("Engenharias", "Direito", "Medicina",
                             "Licenciaturas", "Tecnólogos"))

#Percentual de missing em cada variável
#### Quadro 3 ----
nasexo <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, sexo) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(sexo), values_from = c(N)) %>%
  mutate(soma = Feminino + Masculino + `NA`, 
         NA.sexo = (`NA`/soma)*100) %>%
  dplyr::select(diploma, Ano, NA.sexo)

nacor <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, cor) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(cor), values_from = c(N)) %>%
  mutate(soma = Branca  + `Não-Branca` + `NA`, 
         NA.cor = (`NA`/soma)*100) %>%
  dplyr::select(diploma, Ano, NA.cor)

naedu <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(diploma, Ano, edu) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(edu), values_from = c(N)) %>%
  mutate(soma = `Até Ensino Médio`  + `Ensino superior ou mais` + `NA`, 
         NA.edu = (`NA`/soma)*100) %>%
  dplyr::select(diploma, Ano, NA.edu)

mergeCols <- c("diploma", "Ano")
tabela  <- full_join(nasexo,  nacor, by = mergeCols)
tabela  <- full_join(tabela,  naedu, by = mergeCols)

tudosexo <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, sexo) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(sexo), values_from = c(N)) %>%
  mutate(soma = Feminino + Masculino + `NA`, 
         NA.sexo = (`NA`/soma)*100) %>%
  dplyr::select(Ano, NA.sexo)

tudocor <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, cor) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(cor), values_from = c(N)) %>%
  mutate(soma = Branca  + `Não-Branca` + `NA`, 
         NA.cor = (`NA`/soma)*100) %>%
  dplyr::select(Ano, NA.cor)

tudoedu <- enade %>% mutate(Ano = case_when(
  year == "2" ~ "Ciclo1",
  year == "4" ~ "Ciclo2")) %>%
  group_by(Ano, edu) %>%
  summarise(N = n()) %>%
  pivot_wider(names_from = c(edu), values_from = c(N)) %>%
  mutate(soma = `Até Ensino Médio`  + `Ensino superior ou mais` + `NA`, 
         NA.edu = (`NA`/soma)*100) %>%
  dplyr::select(Ano, NA.edu)

mergeCols <- c("Ano")
tabelao  <- full_join(tudosexo,  tudocor, by = mergeCols)
tabelao  <- full_join(tabelao,  tudoedu, by = mergeCols)
tabelao <- tabelao %>% add_column(diploma = "Total")

tabela <- full_join(tabela, tabelao)

tabela %>% gt(rowname_col = "Ano", groupname_col = c("diploma")) %>%
  tab_header(title = "Percentual de missing em cada variável",
             subtitle = "2009 - 2011") %>%
  tab_source_note(source_note = "Enade, 2009-2017. Elaboração própria") %>%
  fmt_number(columns = vars("NA.sexo", "NA.cor", "NA.edu"), decimals = 2) %>%
  cols_label("NA.sexo" = md("Sexo")) %>%
  cols_label("NA.cor" = md("Cor e Raça")) %>%
  cols_label("NA.edu" = md("Escolaridade dos pais")) %>%
  cols_align(align = "center") %>%
  row_group_order(groups = c("Engenharias", "Direito", "Medicina",
                             "Licenciaturas", "Tecnólogos"))
